package com.buka.role.service;

import com.buka.role.dao.RoleDao;
import com.buka.role.entity.Role;
import com.buka.role.entity.UserRole;
import com.buka.user.dao.UserDao;
import com.buka.utils.JDBCUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class RoleService {

    RoleDao roleDao = new RoleDao();

    //新建角色
    public int add(Role role) {
        return roleDao.add(role);
    }

    public int delete(Long id) {
        return roleDao.delete(id);
    }

    public int update(Role role) {
        return roleDao.update(role);
    }

    //查询全部角色
    public List<Role> list() {
        return roleDao.list();
    }

    public Role selectById(Long id) {
        return roleDao.selectById(id);
    }


    //因为jdbc不支持关联查询
    //所以要分成两部查询用户的角色
    public List<Role> selectByUserId(Long userId) {
        //第1步 查询用户角色的关联关系
        List<UserRole> userRoleMapping = roleDao.selectUserRoleByUid(userId);

        //第2步 根据关联关系查询角色列表
        //将userRoleMapping中的rid属性值拼接成字符串
        String ridStr = userRoleMapping.stream()//将流式处理当成是遍历集合来看
                // map 类似于遍历时要做的事 for的方法体
                // ->  箭头后面是一个函数
                .map(userRole -> userRole.getRid().toString())//map 获取集合中的每个元素的属性值
                //收集器，调用的是拼接字符串的方法，会将集合中的元素拼接成一个字符串
                .collect(Collectors.joining(","));
        //1,2,3
        List<Role> roles = roleDao.selectRoleByRoleIds(ridStr);
        return roles;
    }

    public boolean updateUserRole(String userid, String roleId) {

        RoleDao roleDao = new RoleDao();
        //1.根据用户id 删除用户角色关联关系
        boolean del = roleDao.deleteByUserId(userid);//删除失败了
        //2.插入新的用户角色关联关系
        boolean add = roleDao.insertUserRole(userid, roleId);//会不会成功
        return del && add;
    }
}
